export default {
    state: {
      shoppingCart: []
      // shoppingCart结构
      /* 
      shoppingCart = {
        id: "", // 购物车id
        productID: "", // 商品id
        productName: "", // 商品名称
        productImg: "", // 商品图片
        price: "", // 商品价格
        num: "", // 商品数量
        maxNum: "", // 商品限购数量
        check: false // 是否勾选
      } */
    },
    getters: {
      getShoppingCart (state) {
        // 获取购物车状态
        return state.shoppingCart;
      },
      getNum (state) {
        // 购物车商品总数量
        let totalNum = 0;
        for (let i = 0; i < state.shoppingCart.length; i++) {
          const temp = state.shoppingCart[i];
          totalNum += temp.num;
        }
        return totalNum;
      },
      getIsAllCheck (state) {
        // 判断是否全选
        let isAllCheck = true;
        for (let i = 0; i < state.shoppingCart.length; i++) {
          const temp = state.shoppingCart[i];
          // 只要有一个商品没有勾选立即return false;
          if (!temp.check) {
            isAllCheck = false;
            return isAllCheck;
          }
        }
        return isAllCheck;
      },
      getCheckGoods (state) {
        // 获取勾选的商品信息
        // 用于确认订单页面
        let checkGoods = [];
        for (let i = 0; i < state.shoppingCart.length; i++) {
          const temp = state.shoppingCart[i];
          if (temp.check) {
            checkGoods.push(temp);
          }
        }
        return checkGoods;
      },
      getCheckNum (state) {
        // 获取购物车勾选的商品数量
        let totalNum = 0;
        for (let i = 0; i < state.shoppingCart.length; i++) {
          const temp = state.shoppingCart[i];
          if (temp.check) {
            totalNum += temp.num;
          }
        }
        return totalNum;
      },
      getTotalPrice (state) {
        // 购物车勾选的商品总价格
        let totalPrice = 0;
        for (let i = 0; i < state.shoppingCart.length; i++) {
          const temp = state.shoppingCart[i];
          if (temp.check) {
            totalPrice += temp.price * temp.num;
          }
        }
        return totalPrice;
      }
    },
    mutations: {
      setShoppingCart (state, data) {
        // 设置购物车状态
        state.shoppingCart = data;
      },
      unshiftShoppingCart (state, data) {
        // 添加购物车
        // 用于在商品详情页点击添加购物车,后台添加成功后，更新vuex状态
        state.shoppingCart.unshift(data);
      },
      updateShoppingCart (state, payload) {
        // 更新购物车
        // 可更新商品数量和是否勾选
        // 用于购物车点击勾选及加减商品数量
        if (payload.prop == "num") {
          // 判断效果的商品数量是否大于限购数量或小于1
          if (state.shoppingCart[payload.key].maxNum < payload.val) {
            return;
          }
          if (payload.val < 1) {
            return;
          }
        }
        // 根据商品在购物车的数组的索引和属性更改
        state.shoppingCart[payload.key][payload.prop] = payload.val;
      },
      addShoppingCartNum (state, productID) {
        // 增加购物车商品数量
        // 用于在商品详情页点击添加购物车,后台返回002，“该商品已在购物车，数量 +1”，更新vuex的商品数量
        for (let i = 0; i < state.shoppingCart.length; i++) {
          const temp = state.shoppingCart[i];
          if (temp.productID == productID) {
            if (temp.num < temp.maxNum) {
              temp.num++;
            }
          }
        }
      },
      deleteShoppingCart (state, id) {
        // 根据购物车id删除购物车商品
        for (let i = 0; i < state.shoppingCart.length; i++) {
          const temp = state.shoppingCart[i];
          if (temp.id == id) {
            state.shoppingCart.splice(i, 1);
          }
        }
      },
      checkAll (state, data) {
        // 点击全选按钮，更改每个商品的勾选状态
        for (let i = 0; i < state.shoppingCart.length; i++) {
          state.shoppingCart[i].check = data;
        }
      }
    },
    actions: {
      setShoppingCart ({ commit }, data) {
        commit('setShoppingCart', data);
      },
      unshiftShoppingCart ({ commit }, data) {
        commit('unshiftShoppingCart', data);
      },
      updateShoppingCart ({ commit }, payload) {
        commit('updateShoppingCart', payload);
      },
      addShoppingCartNum ({ commit }, productID) {
        commit('addShoppingCartNum', productID);
      },
      deleteShoppingCart ({ commit }, id) {
        commit('deleteShoppingCart', id);
      },
      checkAll ({ commit }, data) {
        commit('checkAll', data);
      }
    }
  }